package main

/**
带缓冲区的channel
 */
import "fmt"

// 这里的 message 在函数 send 中就是一个只能发送数据的通道
func send(msg string, message chan<- string) {
	message<- msg
}

// 这里的 message 在函数 receive 中就是一个只能发送数据的通道
func 	receive(message <-chan string) string {
	msg := <- message
	return msg
}

func main() {
	//定义带缓冲区channel
	messages := make(chan string, 2)
	messages <- "buffered"
	messages <- "channel-0"
	fmt.Println(<-messages)
	fmt.Println(<-messages)


	messages <- "channel-1"
	fmt.Println(<-messages)

	//缓冲区满了会报错,可以通过协程的方式解决
	messages <- "channel-2"
	messages <- "channel-3"
	go func() {
		messages <- "thread"
	}()

	fmt.Println(<-messages)
	fmt.Println(<-messages)
	fmt.Println(<-messages)

	message1 := make(chan string)
	go send("hello", message1)
	fmt.Println(receive(message1))
}
